{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fully Connected Neural Network\n",
    "\n",
    "In this example, we show how one can train a neural network on a specific task (here, Iris Classification) and convert it to its FHE counterpart such that it runs over encrypted data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import time\n",
    "\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "from sklearn.datasets import load_iris\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.model_selection import train_test_split\n",
    "from torch import nn\n",
    "from tqdm import tqdm\n",
    "\n",
    "from concrete.ml.sklearn import NeuralNetClassifier"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define all required variables to train the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Get iris data-set\n",
    "\n",
    "X, y = load_iris(return_X_y=True)\n",
    "\n",
    "# Split into train and test\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)\n",
    "\n",
    "# Scikit-Learn and Concrete ML neural networks only handle float32 input values\n",
    "X_train, X_test = X_train.astype(\"float32\"), X_test.astype(\"float32\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Model training and evaluation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "params = {\n",
    "    \"module__n_layers\": 3,\n",
    "    \"module__activation_function\": nn.ReLU,\n",
    "    \"max_epochs\": 1000,\n",
    "    \"verbose\": 0,\n",
    "}\n",
    "model = NeuralNetClassifier(**params)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "model, sklearn_model = model.fit_benchmark(X=X_train, y=y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The test accuracy of the trained scikit-learn model is 100.00%\n"
     ]
    }
   ],
   "source": [
    "# Evaluate the sklearn model, which needs to specifically be of type float32\n",
    "y_pred_sklearn = sklearn_model.predict(X_test)\n",
    "\n",
    "sklearn_accuracy = accuracy_score(y_test, y_pred_sklearn) * 100\n",
    "print(f\"The test accuracy of the trained scikit-learn model is {sklearn_accuracy:.2f}%\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The test accuracy of the trained Concrete ML simulated model is 97.37%\n"
     ]
    }
   ],
   "source": [
    "# Evaluate the Concrete ML model in the clear\n",
    "y_pred_simulated = model.predict(X_test)\n",
    "\n",
    "simulated_accuracy = accuracy_score(y_test, y_pred_simulated) * 100\n",
    "print(f\"The test accuracy of the trained Concrete ML simulated model is {simulated_accuracy:.2f}%\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## FHE Inference"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Compile the model to have before\n",
    "fhe_circuit = model.compile(X_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Generate the key"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Generating a key for a 9-bit circuit\n"
     ]
    }
   ],
   "source": [
    "print(\"Generating a key for a \" f\"{fhe_circuit.graph.maximum_integer_bit_width()}-bit circuit\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Key generation time: 3.28 seconds\n"
     ]
    }
   ],
   "source": [
    "time_begin = time.time()\n",
    "fhe_circuit.client.keygen(force=True)\n",
    "print(f\"Key generation time: {time.time() - time_begin:.2f} seconds\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Predict in FHE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "  0%|          | 0/38 [00:00<?, ?it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "  3%|▎         | 1/38 [00:02<01:21,  2.20s/it]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "  5%|▌         | 2/38 [00:03<00:54,  1.51s/it]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "  8%|▊         | 3/38 [00:04<00:45,  1.29s/it]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 11%|█         | 4/38 [00:05<00:38,  1.13s/it]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 13%|█▎        | 5/38 [00:06<00:36,  1.10s/it]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 16%|█▌        | 6/38 [00:07<00:35,  1.10s/it]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 18%|█▊        | 7/38 [00:08<00:31,  1.02s/it]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 21%|██        | 8/38 [00:09<00:30,  1.02s/it]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 24%|██▎       | 9/38 [00:10<00:29,  1.02s/it]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 26%|██▋       | 10/38 [00:11<00:28,  1.01s/it]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 29%|██▉       | 11/38 [00:11<00:25,  1.05it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 32%|███▏      | 12/38 [00:13<00:26,  1.03s/it]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 34%|███▍      | 13/38 [00:14<00:25,  1.03s/it]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 37%|███▋      | 14/38 [00:15<00:23,  1.03it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 39%|███▉      | 15/38 [00:15<00:21,  1.09it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 42%|████▏     | 16/38 [00:16<00:19,  1.11it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 45%|████▍     | 17/38 [00:17<00:18,  1.14it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 47%|████▋     | 18/38 [00:18<00:17,  1.17it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 50%|█████     | 19/38 [00:19<00:15,  1.19it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 53%|█████▎    | 20/38 [00:19<00:14,  1.21it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 55%|█████▌    | 21/38 [00:20<00:14,  1.21it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 58%|█████▊    | 22/38 [00:21<00:13,  1.21it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 61%|██████    | 23/38 [00:22<00:12,  1.21it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 63%|██████▎   | 24/38 [00:23<00:11,  1.21it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 66%|██████▌   | 25/38 [00:24<00:10,  1.21it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 68%|██████▊   | 26/38 [00:25<00:11,  1.07it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 71%|███████   | 27/38 [00:26<00:10,  1.04it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 74%|███████▎  | 28/38 [00:27<00:09,  1.09it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 76%|███████▋  | 29/38 [00:27<00:07,  1.15it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 79%|███████▉  | 30/38 [00:28<00:06,  1.21it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 82%|████████▏ | 31/38 [00:29<00:05,  1.21it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 84%|████████▍ | 32/38 [00:30<00:05,  1.04it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 87%|████████▋ | 33/38 [00:31<00:04,  1.12it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 89%|████████▉ | 34/38 [00:32<00:03,  1.15it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 92%|█████████▏| 35/38 [00:33<00:02,  1.17it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 95%|█████████▍| 36/38 [00:34<00:01,  1.04it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      " 97%|█████████▋| 37/38 [00:35<00:00,  1.00it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "100%|██████████| 38/38 [00:36<00:00,  1.08it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\r",
      "100%|██████████| 38/38 [00:36<00:00,  1.05it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Execution time: 0.95 seconds per sample\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "fhe_predictions = []\n",
    "time_begin = time.time()\n",
    "for x in tqdm(X_test):\n",
    "    y_ = model.predict(np.array([x]), fhe=\"execute\")[0]\n",
    "    fhe_predictions.append(y_)\n",
    "\n",
    "print(f\"Execution time: {(time.time() - time_begin) / len(X_test):.2f} seconds per sample\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Compare the accuracy scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test accuracy using the sklearn model: 100.00%\n",
      "Test accuracy using the Concrete ML simulated model: 97.37%\n",
      "Test accuracy using the Concrete ML FHE model: 97.37%\n"
     ]
    }
   ],
   "source": [
    "fhe_accuracy = accuracy_score(y_test, fhe_predictions) * 100\n",
    "\n",
    "print(f\"Test accuracy using the sklearn model: {sklearn_accuracy:.2f}%\")\n",
    "print(f\"Test accuracy using the Concrete ML simulated model: {simulated_accuracy:.2f}%\")\n",
    "print(f\"Test accuracy using the Concrete ML FHE model: {fhe_accuracy:.2f}%\")"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plot the predicted boundaries"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Although we executed the predictions on encrypted data when testing our model's performance, here the boundaries are predictions made over clear data points using simulated FHE, making this notebook faster to run. Predictions in FHE are expected to equivalent to these, as we showed above."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create a 2D grid in order to visualize predictions and contours for both models\n",
    "pca = PCA(n_components=2, random_state=np.random.randint(0, 2**15))\n",
    "X_test_2d = pca.fit_transform(X_test)\n",
    "\n",
    "b_min = np.min(X_test_2d, axis=0)\n",
    "b_max = np.max(X_test_2d, axis=0)\n",
    "\n",
    "grid_dims = tuple(\n",
    "    np.linspace(b_min[i], b_max[i], 512, dtype=X_test.dtype) for i in range(X_test_2d.shape[1])\n",
    ")\n",
    "ndgrid_tuple = np.meshgrid(*grid_dims)\n",
    "grid_2d = np.vstack([g.ravel() for g in ndgrid_tuple]).transpose()\n",
    "\n",
    "grid_test = pca.inverse_transform(grid_2d)\n",
    "\n",
    "# Evaluate the predicted classes using the sklearn model\n",
    "grid_pred_sklearn = sklearn_model.predict_proba(grid_test)\n",
    "pred_sklearn_classes = np.argmax(grid_pred_sklearn, axis=1)\n",
    "\n",
    "# Evaluate the predicted classes using the Concrete ML simulated model\n",
    "# Pylint is disabled because it does not seem to be able to understand that `model` is a\n",
    "# NeuralClassifier instance and support the predict_proba method. This may be solved by removing\n",
    "# Skorch and Sklearn inheritance\n",
    "# FIXME: https://github.com/zama-ai/concrete-ml-internal/issues/3373\n",
    "grid_pred_fhe = model.predict_proba(grid_test)  # pylint: disable=no-member\n",
    "pred_fhe_classes = np.argmax(grid_pred_fhe, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABR8AAAI1CAYAAABfUY0CAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAADHaUlEQVR4nOzdd3xN9x/H8ddNIpPEHiFce6/aO/beu4NYVUWriupCpxqlfq1Sqrbas4qqVWoVRbU1a29KIkHm/f1xmnBlitzcjPfz8biPyPd8zzmfG7f1yed8h8lisVgQERERERERERERSWIO9g5ARERERERERERE0iYVH0VERERERERERMQmVHwUERERERERERERm1DxUURERERERERERGxCxUcRERERERERERGxCRUfRURERERERERExCZUfBQRERERERERERGbUPFRREREREREREREbELFRxEREREREREREbEJFR9FREQk1TCZTFavDBkykD17dsqWLYufnx8rVqwgLCzMbvH5+flhMpnYvn17oq9hNpsxmUxJF1QSSYr3lpr4+vpiMpk4d+6cze+V3n62IiIikr442TsAERERkafVs2dPACIiIvD39+fkyZPMmzePuXPnUqRIERYuXEjVqlXtHKWIiIiIiJgsFovF3kGIiIiIJETkiMCY0pczZ87wzjvvsHTpUtzd3fn111+pUKFCssZ39epV/P39yZ8/P+7u7om6xpkzZwgNDaVEiRJJHN2z8fPzY+7cuWzbtg1fX197h2Nzvr6+7Nixg7Nnz2I2m216r6T43IiIiIikVBr5KCIiImlC4cKFWbJkCZkyZWLWrFn07t2bQ4cOJWsMefLkIU+ePM90jcKFCydRNJJaJMXnRkRERCSl0pqPIiIikqZ8/vnneHh48Pvvv7Nr165oxy9evMigQYMoXLgwrq6uZM2alVatWrF79+5Yr/n333/Tp08fzGYzLi4u5MyZk1q1ajFx4kSrNSZjW7vv5s2bjBw5klKlSpExY0a8vLwoVqwYPXr0YP/+/VZ941rzcc+ePbRt25YcOXLg4uKC2Wzm1Vdf5cqVK9H6zpkzB5PJxJgxY7hw4QLPP/88OXLkwM3NjcqVK7Nu3bq4foxx2rBhA7Vr1yZjxoxkyZKFDh06cPz48Vj7z58/n9q1a+Pp6Ym7uzvlypVj7NixPHz4MFrfuNZaPHfu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VaoUv//+O8uXL+fo0aMUKlSICRMmMGzYsKj+Q4cOZeDAgWTKlImdO3eyatUqbty4QdeuXdm3bx+dO3dO8hhFRERE4mOyxLYln4iIiIiIiIiIiMgz0MhHERERERERERERsQkVH0VERERERERERMQmVHwUERERERERERERm1DxUURERERERERERGxCxUcRERERERERERGxCRUfRURERERERERExCZUfBQRERERERERERGbUPFRREREREREREREbELFRxEREREREREREbEJFR9FRERERERERETEJlR8FBEREREREREREZtQ8VFERERERERERERsQsVHERERERERERERsQkVH0VERERERERERMQmVHwUERERERERERERm1DxUURERERERERERGxCxUcRERERERERERGxCRUfRURERERERERExCZUfBQRERERERERERGbUPFRREREREREREREbELFRxEREREREREREbEJFR9F0hmz2Yyfn5+9w0hSv/32GzVr1sTDwwOTycThw4ftHZLdjR8/nhIlShAREfHU5/r5+ZExY8Z4+/n6+uLr65uI6JJXt27d6NKli73DEBERETtQnhjds+SJkvymT59O/vz5CQ4OtncoIomm4qNIGnHmzBn69+9PoUKFcHV1xdPTk1q1ajFlyhQePHhg7/Di5OvrS5kyZRJ1bmhoKJ07d+bff/9l8uTJzJ8/nwIFCiRxhKlLQEAA48aN46233sLB4dH/5gMDAxk9ejRlypTBw8ODbNmyUaFCBV5//XWuXLlix4ht66233mLFihUcOXLE3qGIiIikWHPmzMFkMsX4GjlyZFQ/s9lMq1atYrzG9u3bMZlMLF++PEHXNZlM7N27N864lCcmrdjyRICHDx8yefJkqlWrhpeXF66urhQrVoxBgwZx8uRJO0WcdO7fv8+YMWPYvn17kl878vPct2/fGI+/++67UX1u3boV1Z6Qh/5+fn6EhITwzTffJGnMIsnJyd4BiMizW79+PZ07d8bFxYUePXpQpkwZQkJC2LVrF8OHD+fPP/9kxowZ9g7TJs6cOcP58+eZOXNmrP/YpzffffcdYWFhdO/ePaotNDSUunXrcvz4cXr27MngwYMJDAzkzz//ZNGiRbRv3x5vb287Rm07FStWpHLlynz++efMmzfP3uGIiIikaB9++CEFCxa0akts8S++6wIUKVLkma8dG+WJ0cWUJwLcunWLZs2acfDgQVq1asXzzz9PxowZOXHiBIsXL2bGjBmEhITYKeqkcf/+fT744AMAm8zecXV1ZcWKFXz99dc4OztbHfv+++9xdXXl4cOHibpuz549mTRpEoMHD8ZkMiVVyCLJRsVHkVTu7NmzdOvWjQIFCrB161by5MkTdWzgwIGcPn2a9evX2zFCiIiIICQkBFdX1yS/9o0bNwDInDlzkl0zKCgIDw+PJLtecps9ezZt2rSx+nmvXr2a33//nYULF/L8889b9X/48GGqSSYtFgsPHz7Ezc3tqc7r0qULo0eP5uuvv07QlHIREZH0qnnz5lSuXDnVXDcuyhOjiylPBGN03e+//87y5cvp2LGj1bGPPvqId999NznDTJDE5oW20qxZM9auXcuGDRto27ZtVPvu3bs5e/YsHTt2ZMWKFYm6dpcuXRg/fjzbtm2jQYMGSRWySLLRtGuRVG78+PEEBgYya9Ysq8JjpCJFivD666/HeY27d+8yZMgQfHx8cHFxoUiRIowbNy7aOjATJ06kZs2aZMuWDTc3NypVqmQ1rSaSyWRi0KBBLFy4kNKlS+Pi4sLGjRuf6n1FXmP16tWUKVMGFxcXSpcubXUdPz8/6tWrB0Dnzp0xmUxWTzGPHz9Op06dyJo1K66urlSuXJm1a9da3SdyKtCOHTt49dVXyZkzJ/ny5Ys6vmHDBurUqYOHhweZMmWiZcuW/Pnnn1bXiJwucfnyZdq1a0fGjBnJkSMHw4YNIzw83KpvREQEU6ZMoWzZsri6upIjRw6aNWvGgQMHrPotWLCASpUq4ebmRtasWenWrRsXL16M9+d29uxZjh49SqNGjazaz5w5A0CtWrWinRM5TT8uhw8fJkeOHPj6+hIYGBhrv+DgYEaPHk2RIkVwcXHBx8eHESNGRFujZvbs2TRo0ICcOXPi4uJCqVKlmDZtWrTrRU7t2rRpE5UrV8bNzY1vvvkmalrX0qVL+eSTT8iXLx+urq40bNiQ06dPR7tO48aNCQoKYvPmzXG+TxEREUn5lCcmbZ64b98+1q9fT58+faIVHgFcXFyYOHGiVdvWrVuj3nvmzJlp27Ytf//9t1WfMWPGYDKZOH36NH5+fmTOnBkvLy969erF/fv3o91nwYIFVK1aFXd3d7JkyULdunX56aefoo7HlhdC/L/PnDt3jhw5cgDwwQcfRE2BHjNmTNT1E/KZiEvevHmpW7cuixYtsmpfuHAhZcuWfaYRxJUqVSJr1qysWbMm0dcQsSeNfBRJ5datW0ehQoWoWbNmos6/f/8+9erV4/Lly/Tv35/8+fOze/du3n77ba5evcoXX3wR1XfKlCm0adOGF154gZCQEBYvXkznzp354YcfaNmypdV1t27dytKlSxk0aBDZs2fHbDY/dWy7du1i5cqVvPrqq2TKlIn//e9/dOzYkQsXLpAtWzb69+9P3rx5+fTTT3nttdeoUqUKuXLlAuDPP/+kVq1a5M2bl5EjR+Lh4cHSpUtp164dK1asoH379lb3evXVV8mRIwejRo0iKCgIgPnz59OzZ0+aNm3KuHHjuH//PtOmTaN27dr8/vvvVu8pPDycpk2bUq1aNSZOnMjPP//M559/TuHChRkwYEBUvz59+jBnzhyaN29O3759CQsLY+fOnezduzdqNMAnn3zC+++/T5cuXejbty83b97kyy+/pG7duvz+++9xPr3fvXs3AM8995xVe+T6RvPmzeO99957qukav/32G02bNqVy5cqsWbMm1qfLERERtGnThl27dvHyyy9TsmRJ/vjjDyZPnszJkydZvXp1VN9p06ZRunRp2rRpg5OTE+vWrePVV18lIiKCgQMHWl33xIkTdO/enf79+9OvXz+KFy8edeyzzz7DwcGBYcOG4e/vz/jx43nhhRfYt2+f1TVKlSqFm5sbv/76a7S/exEREXnE39/fak06gOzZs1t9HxoaGq1P5LlPc12TyUS2bNkSFafyxKTLEyMLbC+99FKCfvY///wzzZs3p1ChQowZM4YHDx7w5ZdfUqtWLQ4dOhQt7+/SpQsFCxZk7NixHDp0iG+//ZacOXMybty4qD4ffPABY8aMoWbNmnz44Yc4Ozuzb98+tm7dSpMmTaL6xZQXJuT3mRw5cjBt2jQGDBhA+/bt6dChAwDlypUDnv4zEZvnn3+e119/ncDAQDJmzEhYWBjLli1j6NChiZpy/bjnnnuOX3/99ZmuIWI3FhFJtfz9/S2ApW3btgk+p0CBApaePXtGff/RRx9ZPDw8LCdPnrTqN3LkSIujo6PlwoULUW3379+36hMSEmIpU6aMpUGDBlbtgMXBwcHy559/JiimevXqWUqXLh3tGs7OzpbTp09HtR05csQCWL788suo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EfBbOIRboIwjFHW0d2QiIiIiSU/5aMrjZIL3XeEtF9gZBncskNMBajlqnUcREZG0yKYjHw8cOEDFihWpWLEiAEOHDqVixYqMGjUKgKtXr1rtDDhjxgzCwsIYOHAgefLkiXq9/vrrUX0uXbpE9+7dKV68OF26dCFbtmzs3buXHDmeXMVQ4pLHAdpkgPbOKjyKiKRaZnsHIJLyKR9NuZxN0DADdHKGutpgRkREJM1Ktg1nUpKAgAC8vLzS3QLfIjbnZ+8ARNIRX7TZTDqnDWdSN+WjIimcGf07K7blhx4kS6qX0Hw0xa35KCIiIiIiImJXvvYOQEQk7VDxUURERERERERERGxCxUcRERERERERERGxCRUfRURERERERERExCZUfBQREUltfNFaVCIiIiIikiqo+CgiScPP3gGIiIiIiIiISEqj4qOIiIiIiIiIiIjYhIqPIiIiIiIiIiIiYhMqPoqIiIiIiIiIiIhNqPgoIiKSmpjRZjMiIiIiIpJqqPgoIiKSmvjaOwAREREREZGEU/FRRJ6dn70DEBEREREREZGUSMVHERERERERERERsQkVH0VERERERERERMQmVHwUERERERERERERm1DxUUREJLXww9jtWkREREREJJVQ8VFERERERERERERsQsVHEXk2vvYOQEREREQkCfnZOwARkbRFxUcRSTwzmgIqIiIiIiIiIrFS8VFERERERERERERsQsVHERGR1MAXjTQWEREREZFUR8VHERGR1MDX3gGIiIiIiIg8PRUfRURERERERERExCZUfBQRERERERERERGbUPFRRBLHjKaBioiIiIiIiEicVHwUERFJ6cz2DkBERERERCRxVHwUERFJ6fzsHYCIiIiIiEjiqPgoIiIiIiIiIiIiNqHio4iIiIiIiIiIiNiEio8iIiIiIiIiIiJiEyo+ikji+No7ABERERERERFJ6VR8FJGn52vvAETSkTH2DkBERERERCTxVHwUERFJqcz2DkBEREREROTZqPgoIiIiIiIiAuBn7wBERNIeFR9FRERERERERETEJlR8FBEREREREREREZtQ8VFEnp7Z3gGIpBNmewcgIiIiIiLybFR8FJGn42vvAETSCTP6701ERERERFI9FR9FRERERERERETEJlR8FBERkQTZfxBefRMq1YMM2cGUOe7+s+ZByargmguKPgdffhNz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f/vtt+nRo0dU/1deeYV//vmHESNGcPz4cb7++muWLl3KG2+8EdVn6NChzJw5k7lz5/L3338zYMAAgoKC6NUrhm2NRERE0rFps2DAUMiZ3VjvUCQ9Uj4qIiJiP8pHBWw87frAgQPUr18/6vuhQ4cC0LNnT+bMmcPVq1ejEj+AggULsn79et544w2mTJlCvnz5+Pbbb2natGlUn65du3Lz5k1GjRrFtWvXqFChAhs3boy26LeIJCE/ewcgIokxZ5rxEknPlI+KiIjYj/JRgWTccCYlCQgIwMvLSwt8iySUn70DEEkHzOi/NXkq2nAmdVM+KpLCmNGGM5J8/Eh3G85I2pTQfDRFrfkoIiKSbvnaOwAREREREZGkp+KjiIiIiIiIiIiI2ISKjyIiIiIiIiIiImITKj6KiIiIiIiIiIiITaj4KCJx87N3ACIiIiIiIiKSWqn4KCIiYm9+aMdDERERERFJk1R8FBEREREREREREZtQ8VFERERERERERERsQsVHERERERERSd987R2AiEjapeKjiIiIiIiIpF9mewcgIpK2qfgoIrHzs3cAIumAL/qlR0RERERE0iwVH0VEROzJbO8AREREREREbEfFRxEREREREREREbEJFR9FRERERERERETEJlR8FBEREREREREREZtQ8VFERMRezGjNRxERERERSdNUfBSRmPnaOwCRdMDP3gGIiIiIiIjYloqPIhIzs70DEBEREREREZHUTsVHEYnObO8ARERERERERCQtUPFRREREREREREREbELFRxEREREREREREbEJFR9FRETsYYy9AxAREREREbE9FR9FRERERERERETEJlR8FBFrZsDXzjGIiIiIiIiISJqg4qOIiIiIiIikX2Z7ByAikrap+CgiIiIiIiLpkxkVH0VEbEzFRxERkeTma+8AREREREREkoeKjyIiIsnJjIqPIiIiIiKSbqj4KCIiIiIiIiIiIjah4qOIWPO1dwAiIiIiIiIiklao+Cgij5jtHYCIiIiIiIiIpCUqPoqIiIiIiIiIiIhNqPgoIiKSXMyAn51jEBERERERSUYqPoqIiIiIiIiIiIhNqPgoIiIiIiIiIiIiNqHio4g84mvvAEREREREREQkLVHxUUQMvvYOQERERERERETSGhUfRUREkoufvQMQERERERFJXio+ioiIJAdfewcgIiIiIiKS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8lFERERERERERERsQsVHERERERERERERsQkVH0XSG197ByAiIiIiIiIi6YWKjyLpjdneAYiIiIiI2JEZ5cQiIslIxUcREZGk4mfvAERERCRevvYOQEQkfVHxUUREJCmY0SgKERERERGRJ6j4KCIiIiIiIiIiIjah4qOIiIiIiIiIiIjYhIqPIiIiIiIiIiIiYhNO9g5ARJKJGS2uLSIiIiIiIiLJSiMfRUREnpUZ7XQtIiIiIiISAxUfRURERERERERExCZUfBQRERERERERERGbUPFRREREREREREREbELFRxEREREREREREbEJFR9F0gtfewcgkob52TsAERERERGRlEnFR5H0wGzvAETSMLO9AxAREREREUm5VHwUERERERERERERm1DxUURERERERERERGxCxUcRERERERERERGxCRUfRUREnoWvvQMQERGRBPOzdwAiIumPio8i6YGvvQMQSaN80YYzIiIiIiIicVDxUSStM9s7ABERERERERFJr1R8FBEREREREREREZtQ8VFERERERERExNb87B2AiH2o+CgiIiIiIiIiYktmtCSWpFsqPoqIiCSGL9rMSUREREREJB4qPoqkdWZ7ByAiIiIiIiIi6ZWKjyJpmS8qPoqIiIiIiIiI3aj4KCIiIiIiIiIiIjah4qOIiIiIiIiIiIjYhIqPIiIiieFr7wBERERERERSPhUfRUREnpavvQMQERERERFJHVR8FBEREREREREREZtQ8VEkrTKjna5FRERERERExK6Spfg4depUzGYzrq6uVKtWjf3798fad86cOZhMJquXq6urVR+LxcKoUaPIkycPbm5uNGrUiFOnTtn6bYikLmZ7ByAiIpJyKB8VERERsQ+bFx+XLFnC0KFDGT16NIcOHaJ8+fI0bdqUGzduxHqOp6cnV69ejXqdP3/e6vj48eP53//+x/Tp09m3bx8eHh40bdqUhw8f2vrtiIiIiEgqo3xURERExH5sXnycNGkS/fr1o1evXpQqVYrp06fj7u7Od999F+s5JpOJ3LlzR71y5coVdcxisfDFF1/w3nvv0bZtW8qVK8e8efO4cuUKq1evtvXbERGR9M4PbTgjksooHxURwPg3XEREkp1Ni48hISEcPHiQRo0aPbqhgwONGjViz549sZ4XGBhIgQIF8PHxoW3btvz5559Rx86ePcu1a9es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nYJlZGQQHh7O3Llzc6wLM3DgQE6cOKEZIkWg9XUu3siRI/nqq69YsWIFNWrUMDuO1+vcuTO1atXi7bffNjuKSIlTTVo8qkeLR/Woa6geLVmqSS+eatKSo3q0ZASaHcDdypcvT/ny5S/quQ6HA4D09PSSjOR1ivIeHjhwgI4dO9KsWTNmzJjh94UeFO/foOQtODiYZs2asWTJkjMFisPhYMmSJYwcOdLccOLznE4no0aNYv78+SxbtkxFXglxOBx+/3+u+C7VpMWjerR4VI+6hupRMZtq0pKnerRk+F3zsbBWr17N2rVradeuHWXKlGHnzp08/vjj1KpVy2+vMBfVgQMHsNvtVK9enZdffpmjR4+eORcTE2NiMu+xd+9ejh8/zt69e8nOzmb9+vUA1K5dm8jISHPDeaDRo0czcOBAmjdvTsuWLXn99ddJTk5m0KBBZkfzeElJSezYsePM73fv3s369espW7Ys1apVMzGZdxgxYgSzZs3iq6++olSpUmfWdYqOjiYsLMzkdN5h/PjxdO/enWrVqnHy5ElmzZrFsmXL+P77782OJmIq1aTFo3q0+FSPFo3q0eJRTVo8qkmLR/WoCzklVxs2bHB27NjRWbZsWWdISIjTZrM5hw0b5ty/f7/Z0bzGjBkznECuDymcgQMH5vr+LV261OxoHmvSpEnOatWqOYODg50tW7Z0/vrrr2ZH8gpLly7N9d/awIEDzY7mFfL6Xjdjxgyzo3mNO++801m9enVncHCws3z58s5OnTo5Fy1aZHYsEdOpJi0e1aPFp3q06FSPXjzVpMWjmrR4VI+6jt+t+SgiIiIiIiIiIiLuoQVPRERERERERERExCXUfBQRERERERERERGXUPNRREREREREREREXELNRxEREREREREREXEJNR9FRERERERERETEJdR8FBEREREREREREZdQ81FERERERERERERcQs1HERERERERERERcQk1H0VERERERERERMQl1HwUERERERERERERl1DzUURERERERERERFzi/wHqIKEK0i2x9wAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1600x600 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "cmap = \"autumn\"\n",
    "\n",
    "classes_to_plot = [\n",
    "    (pred_sklearn_classes, \"Clear Inference (Sklearn)\", sklearn_accuracy),\n",
    "    (pred_fhe_classes, \"FHE Inference (Concrete ML)\", simulated_accuracy),\n",
    "]\n",
    "\n",
    "fig, axes = plt.subplots(1, 2, figsize=(16, 6))\n",
    "\n",
    "for i, (classes, title, accuracy) in enumerate(classes_to_plot):\n",
    "    ax = axes[i]\n",
    "\n",
    "    # Plot contours based on the predicted classes\n",
    "    ax.contourf(\n",
    "        ndgrid_tuple[0],\n",
    "        ndgrid_tuple[1],\n",
    "        classes.reshape(ndgrid_tuple[0].shape),\n",
    "        cmap=cmap,\n",
    "        label=\"ookko\",\n",
    "    )\n",
    "\n",
    "    # Set the title and legend text\n",
    "    ax.set_title(title)\n",
    "    ax.text(1.6, 1, f\"accuracy: {accuracy:.2f}\", size=12)\n",
    "\n",
    "    # Plot the test data as a scatter with marker borders\n",
    "    ax.scatter(X_test_2d[:, 0], X_test_2d[:, 1], c=y_test, s=50, edgecolors=\"k\", cmap=cmap)\n",
    "\n",
    "fig.suptitle(\"Decision boundaries\", size=15)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Conclusion\n",
    "\n",
    "In this notebook, we presented a NeuralNetworkClassifier model built with:\n",
    "\n",
    "- [Skorch](https://github.com/skorch-dev/skorch) to have a scikit-learn like API wrapped around [Torch](https://github.com/pytorch/pytorch). \n",
    "- [Brevitas](https://github.com/Xilinx/brevitas) which provides low-bit Quantization Aware Training functionality to Torch.\n",
    "\n",
    "The final accuracy of the model in clear can then be expected in FHE (which is what we observe here).\n"
   ]
  }
 ],
 "metadata": {
  "execution": {
   "timeout": 10800
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
